Node.js এ একটি HTTP সার্ভার তৈরি করা খুবই সহজ এবং শক্তিশালী। Node.js এর http মডিউল ব্যবহার করে আপনি দ্রুত একটি HTTP সার্ভার তৈরি করতে পারেন যা ক্লায়েন্টের রিকোয়েস্ট গ্রহণ করে এবং রেসপন্স প্রদান করে।
১. HTTP মডিউল ইম্পোর্ট করা
Node.js-এ HTTP সার্ভার তৈরি করতে প্রথমে http মডিউলকে ইম্পোর্ট করতে হয়। এই মডিউলটি HTTP রিকোয়েস্ট এবং রেসপন্স হ্যান্ডল করার জন্য প্রয়োজনীয় ফাংশনালিটি প্রদান করে।
const http = require('http'); // HTTP মডিউল ইম্পোর্ট করা২. সার্ভার তৈরি করা
এখন http.createServer() মেথড ব্যবহার করে একটি সার্ভার তৈরি করতে হবে। এই মেথডটি একটি কলব্যাক ফাংশন গ্রহণ করে যা দুইটি আর্গুমেন্ট নেয়:
req: HTTP রিকোয়েস্ট অবজেক্টres: HTTP রেসপন্স অবজেক্ট
আপনি এই আর্গুমেন্টগুলি ব্যবহার করে রিকোয়েস্টের ডেটা পড়তে এবং রেসপন্স প্রেরণ করতে পারবেন।
const server = http.createServer((req, res) => {
res.statusCode = 200; // HTTP স্ট্যাটাস কোড 200 (OK)
res.setHeader('Content-Type', 'text/plain'); // রেসপন্সের কন্টেন্ট টাইপ
res.end('Hello, World!'); // রেসপন্স পাঠানো
});এখানে createServer() মেথডের মধ্যে একটি কলব্যাক ফাংশন রয়েছে যা সার্ভারের প্রতি রিকোয়েস্টের জন্য কার্যকর হয়।
৩. সার্ভার লিসেনিং করা
সার্ভার তৈরির পর, server.listen() মেথড ব্যবহার করে সার্ভার একটি পোর্টে লিসেন করাতে হবে। এটি সার্ভারকে ক্লায়েন্টের রিকোয়েস্ট গ্রহণ করতে সক্ষম করবে।
server.listen(3000, 'localhost', () => {
console.log('Server running at http://localhost:3000/');
});এখানে server.listen() মেথডের প্রথম আর্গুমেন্ট হলো পোর্ট নম্বর এবং দ্বিতীয় আর্গুমেন্ট হলো হোস্ট (অথবা আইপি)। শেষের কলব্যাক ফাংশনটি সার্ভার চালু হলে কনসোলে একটি বার্তা দেখাবে।
৪. সার্ভার চালানো
সম্পূর্ণ কোডটি নিচে দেয়া হলো:
const http = require('http'); // HTTP মডিউল ইম্পোর্ট করা
// HTTP সার্ভার তৈরি করা
const server = http.createServer((req, res) => {
res.statusCode = 200; // HTTP স্ট্যাটাস কোড 200 (OK)
res.setHeader('Content-Type', 'text/plain'); // রেসপন্সের কন্টেন্ট টাইপ
res.end('Hello, World!'); // রেসপন্স পাঠানো
});
// সার্ভার লিসেনিং করা
server.listen(3000, 'localhost', () => {
console.log('Server running at http://localhost:3000/');
});এই কোডটি চালানোর পর, আপনি ব্রাউজারে http://localhost:3000/ এ গিয়ে "Hello, World!" দেখতে পাবেন।
৫. কাস্টম রাউটিং এবং HTTP মেথড (Custom Routing and HTTP Methods)
আপনি চাইলে বিভিন্ন HTTP মেথড (যেমন GET, POST, PUT, DELETE) এবং URL রাউটের উপর ভিত্তি করে কাস্টম রাউটিং করতে পারেন। নিচে একটি উদাহরণ দেয়া হলো যেখানে GET এবং POST রিকোয়েস্ট হ্যান্ডেল করা হয়েছে:
const http = require('http'); // HTTP মডিউল ইম্পোর্ট করা
const server = http.createServer((req, res) => {
// রাউট এবং HTTP মেথড চেক করা
if (req.method === 'GET' && req.url === '/') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('GET request received at root path');
} else if (req.method === 'POST' && req.url === '/data') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('POST request received at /data');
} else {
res.statusCode = 404;
res.end('Not Found');
}
});
server.listen(3000, 'localhost', () => {
console.log('Server running at http://localhost:3000/');
});এখানে, / পাথে GET রিকোয়েস্ট এবং /data পাথে POST রিকোয়েস্ট হ্যান্ডল করা হয়েছে। যদি কোনো অন্য রিকোয়েস্ট আসে, তবে এটি 404 Not Found রেসপন্স দিবে।
৬. স্ট্যাটিক ফাইল সার্ভিং (Serving Static Files)
Node.js HTTP সার্ভার ব্যবহার করে আপনি স্ট্যাটিক ফাইলও সার্ভ করতে পারেন, যেমন HTML, CSS, JavaScript ফাইল। এখানে fs মডিউল ব্যবহার করে ফাইল সার্ভ করার একটি উদাহরণ দেয়া হলো:
const http = require('http');
const fs = require('fs');
const path = require('path');
const server = http.createServer((req, res) => {
const filePath = path.join(__dirname, 'public', req.url === '/' ? 'index.html' : req.url);
const extname = path.extname(filePath);
let contentType = 'text/html';
if (extname === '.js') contentType = 'text/javascript';
else if (extname === '.css') contentType = 'text/css';
else if (extname === '.json') contentType = 'application/json';
fs.readFile(filePath, (err, content) => {
if (err) {
res.statusCode = 500;
res.end('Sorry, an error occurred.');
} else {
res.statusCode = 200;
res.setHeader('Content-Type', contentType);
res.end(content);
}
});
});
server.listen(3000, 'localhost', () => {
console.log('Server running at http://localhost:3000/');
});এখানে fs.readFile() ব্যবহার করে স্ট্যাটিক ফাইল সার্ভ করা হয়েছে। public ফোল্ডারে থাকা ফাইলগুলোর পাথ দিয়ে সার্ভার কন্টেন্ট রেন্ডার করবে।
সারাংশ
Node.js এর http মডিউল ব্যবহার করে সহজেই একটি HTTP সার্ভার তৈরি করা যায়। আপনি HTTP রিকোয়েস্ট গ্রহণ করতে পারেন, কাস্টম রাউটিং এবং HTTP মেথড হ্যান্ডল করতে পারেন, এবং স্ট্যাটিক ফাইল সার্ভ করতে পারেন। এই সার্ভারটি অ্যাসিঙ্ক্রোনাস এবং ইভেন্ট-ড্রিভেন আর্কিটেকচারের মাধ্যমে কার্যকরীভাবে কাজ করে, যা Node.js কে স্কেলেবল ও দ্রুত করে তোলে।
Node.js এর http মডিউল ব্যবহার করে খুব সহজেই একটি HTTP সার্ভার তৈরি করা যায়। এটি একটি ওয়েব সার্ভার তৈরি করতে ব্যবহৃত হয়, যেটি HTTP রিকোয়েস্ট গ্রহণ করতে পারে এবং HTTP রেসপন্স পাঠাতে পারে।
Node.js এ HTTP সার্ভার তৈরি করতে, আপনাকে http.createServer() মেথড ব্যবহার করতে হবে। এই মেথডটি একটি সার্ভার ইনস্ট্যান্স তৈরি করে, যা বিভিন্ন ইভেন্ট এবং রিকোয়েস্ট হ্যান্ডল করতে সক্ষম।
১. বেসিক HTTP সার্ভার তৈরি করা
নিচে একটি সিম্পল HTTP সার্ভারের উদাহরণ দেওয়া হলো:
// http মডিউল ইনপুট করা
const http = require('http');
// সার্ভার তৈরি করা
const server = http.createServer((req, res) => {
// রেসপন্স হেডার সেট করা
res.writeHead(200, { 'Content-Type': 'text/plain' });
// রেসপন্স পাঠানো
res.end('Hello, World!');
});
// সার্ভার 3000 পোর্টে লিসেন করা
server.listen(3000, 'localhost', () => {
console.log('Server running at http://localhost:3000/');
});ব্যাখ্যা:
http.createServer(): এটি একটি ফাংশন যা একটি সার্ভার তৈরি করে। এখানেreq(request) এবংres(response) দুটি অবজেক্ট দেওয়া হয়, যেখানেreqরিকোয়েস্টের ডেটা ধারণ করে এবংresরেসপন্স পাঠানোর জন্য ব্যবহৃত হয়।res.writeHead(200, { 'Content-Type': 'text/plain' }): এটি HTTP রেসপন্সের হেডার সেট করে।200HTTP স্ট্যাটাস কোড (অর্থাৎ রিকোয়েস্ট সফল) এবংContent-Typeহেডার সেট করা হয়েছে যেটি প্লেইন টেক্সট হিসেবে রেসপন্স দেবে।res.end('Hello, World!'): এটি রেসপন্স প্রেরণ করে এবং সার্ভারকে বন্ধ করে দেয়।server.listen(3000, 'localhost'): এটি সার্ভারকে 3000 পোর্টেlocalhostএ লিসেন করতে বলে, যার ফলে আপনিhttp://localhost:3000/URL এ গিয়ে সার্ভারের রেসপন্স দেখতে পারবেন।
২. GET রিকোয়েস্ট হ্যান্ডলিং
HTTP সার্ভারটি GET রিকোয়েস্ট গ্রহণ করতে এবং রেসপন্স দিতে পারে। আমরা GET রিকোয়েস্টে URL অনুসারে বিভিন্ন রেসপন্স দিতে পারি।
const http = require('http');
const server = http.createServer((req, res) => {
// রিকোয়েস্টের URL চেক করা
if (req.url === '/') {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>Welcome to the Home Page!</h1>');
} else if (req.url === '/about') {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>About Us</h1>');
} else {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end('<h1>Page Not Found</h1>');
}
});
server.listen(3000, 'localhost', () => {
console.log('Server running at http://localhost:3000/');
});ব্যাখ্যা:
req.url: এটি রিকোয়েস্টের URL পাথ ধারণ করে। আমরা এর মাধ্যমে নির্দিষ্ট পৃষ্ঠার জন্য রেসপন্স দিতে পারি।res.writeHead(): HTTP স্ট্যাটাস কোড এবং কনটেন্ট টাইপ সেট করার জন্য ব্যবহৃত হয়।- URL পাথ অনুযায়ী রেসপন্স:
- যদি রিকোয়েস্টের URL
/হয়, তাহলে "Welcome to the Home Page!" দেখানো হবে। - যদি URL
/aboutহয়, তাহলে "About Us" দেখানো হবে। - অন্য কোনো URL হলে "Page Not Found" দেখানো হবে।
- যদি রিকোয়েস্টের URL
৩. POST রিকোয়েস্ট হ্যান্ডলিং
HTTP POST রিকোয়েস্ট হ্যান্ডল করার জন্য সাধারণত ইউজার ফর্ম ডেটা বা JSON ডেটা গ্রহণ করা হয়। এখানে একটি POST রিকোয়েস্ট হ্যান্ডল করার উদাহরণ দেওয়া হলো:
const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/submit') {
let body = '';
req.on('data', chunk => {
body += chunk;
});
req.on('end', () => {
const parsedData = querystring.parse(body);
console.log(parsedData); // POST ডেটা কনসোলে প্রিন্ট হবে
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>Form Submitted Successfully</h1>');
});
} else {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end('<h1>Page Not Found</h1>');
}
});
server.listen(3000, 'localhost', () => {
console.log('Server running at http://localhost:3000/');
});ব্যাখ্যা:
- POST রিকোয়েস্ট: এখানে
req.method === 'POST'দিয়ে আমরা POST রিকোয়েস্ট চেক করি, এবং যখন ইউজার ফর্ম সাবমিট করে, তখন এই রিকোয়েস্টটি গ্রহণ করা হয়। req.on('data'): এটি POST ডেটা গ্রহণের জন্য ব্যবহৃত হয়। ডেটা পেতেdataইভেন্টটি ব্যবহার করা হয় এবংendইভেন্টে আমরা পুরো ডেটা প্রক্রিয়া করি।querystring.parse(body): POST ডেটাকে পার্স করার জন্যquerystringমডিউল ব্যবহার করা হয়েছে, যাx-www-form-urlencodedফর্ম ডেটা পার্স করে।
৪. HTTP সার্ভারে JSON রেসপন্স
Node.js HTTP সার্ভারে JSON রেসপন্স পাঠানোর জন্য নিম্নলিখিত কোড ব্যবহার করা যেতে পারে:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url === '/data') {
const responseData = { message: 'Hello, this is JSON data!' };
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(responseData));
} else {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end('<h1>Page Not Found</h1>');
}
});
server.listen(3000, 'localhost', () => {
console.log('Server running at http://localhost:3000/');
});ব্যাখ্যা:
- JSON রেসপন্স: এখানে
/dataURL এ JSON ডেটা রেসপন্স হিসেবে পাঠানো হচ্ছে।JSON.stringify(responseData)ব্যবহার করে অবজেক্টকে JSON স্ট্রিং এ রূপান্তরিত করা হচ্ছে। Content-Type: application/json: রেসপন্স হেডারেContent-Typeহিসেবেapplication/jsonসেট করা হচ্ছে, যাতে ক্লায়েন্ট জানে যে এটি একটি JSON ডেটা।
সারাংশ
Node.js এ HTTP সার্ভার তৈরি করা খুবই সহজ এবং কার্যকরী। আপনি http.createServer() মেথড ব্যবহার করে সার্ভার তৈরি করতে পারেন এবং তার মাধ্যমে GET, POST, এবং অন্যান্য HTTP রিকোয়েস্ট হ্যান্ডল করতে পারেন। সার্ভারের মাধ্যমে আপনি JSON রেসপন্স, ফর্ম ডেটা গ্রহণ, এবং অন্যান্য কার্যকলাপ পরিচালনা করতে পারেন।
Node.js এ request (req) এবং response (res) অবজেক্টগুলি HTTP সার্ভার পরিচালনা করতে ব্যবহৃত হয়। যখন কোন ক্লায়েন্ট (যেমন, ব্রাউজার) সার্ভারে রিকোয়েস্ট পাঠায়, তখন সার্ভার সেই রিকোয়েস্টের জন্য একটি রেসপন্স তৈরি করে পাঠায়। এই রিকোয়েস্ট এবং রেসপন্স অবজেক্টগুলি HTTP রিকোয়েস্ট এবং রেসপন্স সাইকেলকে হ্যান্ডেল করার জন্য ব্যবহৃত হয়।
১. Request Object (req)
Request Object হল ক্লায়েন্ট (যেমন ব্রাউজার) থেকে সার্ভারে পাঠানো HTTP রিকোয়েস্টের তথ্য ধারণকারী অবজেক্ট। এটি রিকোয়েস্টের সমস্ত তথ্য যেমন URL, HTTP মেথড (GET, POST, PUT, DELETE), কুয়েরি প্যারামিটার, হেডার, এবং বডি ইত্যাদি ধারণ করে।
Request Object এর কিছু গুরুত্বপূর্ণ প্রপার্টি এবং মেথড:
req.method: HTTP রিকোয়েস্ট মেথড (যেমন GET, POST, PUT, DELETE) ধারণ করে।req.url: রিকোয়েস্ট URL ধারণ করে।req.headers: রিকোয়েস্ট হেডার ধারণ করে।req.query: URL কুয়েরি প্যারামিটার ধারণ করে (যেমন?name=valueঅংশ)।req.params: রিকোয়েস্ট পাথের প্যারামিটার ধারণ করে (যেমন/users/:idপাথ থেকেidপ্যারামিটার)।req.body: রিকোয়েস্ট বডি (যা POST বা PUT রিকোয়েস্টে পাঠানো ডেটা) ধারণ করে (যতটুকু অ্যাপ্লিকেশন JSON বা URL-এনকোডেড পদ্ধতিতে ডেটা পাঠায়)।
উদাহরণ:
const http = require('http');
const server = http.createServer((req, res) => {
console.log('Request Method:', req.method); // HTTP মেথড (GET, POST, ইত্যাদি)
console.log('Request URL:', req.url); // রিকোয়েস্ট URL
console.log('Request Headers:', req.headers); // রিকোয়েস্ট হেডার
// কুয়েরি প্যারামিটার (যেমন /search?query=hello)
if (req.url.startsWith('/search')) {
let query = new URL(req.url, `http://${req.headers.host}`).searchParams.get('query');
console.log('Search Query:', query); // 'hello'
}
res.end('Request data received.');
});
server.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});এই কোডে, req.method, req.url, এবং req.headers এর মাধ্যমে রিকোয়েস্টের বিভিন্ন তথ্য লগ করা হচ্ছে। কুয়েরি প্যারামিটার req.url থেকে URLSearchParams ব্যবহার করে পাওয়া যাচ্ছে।
২. Response Object (res)
Response Object হল সেই অবজেক্ট যা সার্ভার ক্লায়েন্টকে রিকোয়েস্টের প্রতিক্রিয়া হিসেবে পাঠায়। এটি রিকোয়েস্টের জন্য রেসপন্সের স্ট্যাটাস কোড, হেডার এবং বডি তৈরি করতে ব্যবহৃত হয়।
Response Object এর কিছু গুরুত্বপূর্ণ প্রপার্টি এবং মেথড:
res.statusCode: রেসপন্স স্ট্যাটাস কোড সেট করে (যেমন 200, 404, 500 ইত্যাদি)।res.statusMessage: রেসপন্স স্ট্যাটাস মেসেজ সেট করে (যেমন 'OK', 'Not Found' ইত্যাদি)।res.setHeader(name, value): রেসপন্স হেডার সেট করে (যেমন Content-Type, Authorization ইত্যাদি)।res.write(data): রেসপন্স বডিতে ডেটা লেখার জন্য ব্যবহৃত হয় (যেমন HTML, JSON ইত্যাদি)।res.end(): রেসপন্স পাঠানো সম্পন্ন করার জন্য ব্যবহৃত হয়।res.json(data): JSON ডেটা পাঠানোর জন্য ব্যবহৃত হয় (Express.js এ ব্যবহৃত হয়)।res.redirect(url): অন্য URL তে রিডাইরেক্ট করার জন্য ব্যবহৃত হয়।
উদাহরণ:
const http = require('http');
const server = http.createServer((req, res) => {
// রেসপন্স হেডার সেট করা
res.setHeader('Content-Type', 'text/plain');
// HTTP স্ট্যাটাস কোড সেট করা
res.statusCode = 200; // 200 মানে OK
// রেসপন্স বডি লেখা
res.write('Hello, world!');
// রেসপন্স পাঠানো সম্পন্ন করা
res.end();
});
server.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});এখানে, রেসপন্সের হেডার হিসেবে Content-Type সেট করা হয়েছে এবং রেসপন্স বডিতে Hello, world! পাঠানো হয়েছে।
৩. Request এবং Response Object এর একসাথে ব্যবহার
কোনো HTTP সার্ভার তৈরি করার সময়, আপনি request এবং response অবজেক্টের মাধ্যমে ক্লায়েন্টের রিকোয়েস্ট এবং সার্ভারের রেসপন্স পরিচালনা করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে রিকোয়েস্টের পাথ এবং কুয়েরি প্যারামিটার অনুযায়ী রেসপন্স দেওয়া হচ্ছে:
উদাহরণ:
const http = require('http');
const server = http.createServer((req, res) => {
// রিকোয়েস্টের URL অনুযায়ী কাস্টম রেসপন্স
if (req.url === '/home') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Welcome to Home Page');
} else if (req.url.startsWith('/user')) {
let userId = new URL(req.url, `http://${req.headers.host}`).searchParams.get('id');
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({ userId: userId, message: 'User data received' }));
} else {
res.statusCode = 404;
res.setHeader('Content-Type', 'text/plain');
res.end('Page not found');
}
});
server.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});এই কোডে, /home রিকোয়েস্টে একটি টেক্সট রেসপন্স পাঠানো হচ্ছে, /user রিকোয়েস্টে JSON ডেটা পাঠানো হচ্ছে এবং অন্য URL গুলি 404 রেসপন্স দিচ্ছে।
সারাংশ
- Request Object (
req): ক্লায়েন্ট থেকে সার্ভারে পাঠানো HTTP রিকোয়েস্টের তথ্য ধারণ করে। এর মধ্যে মেথড, URL, হেডার, প্যারামিটার এবং বডি থাকে। - Response Object (
res): সার্ভারের রেসপন্স তৈরি এবং পাঠানোর জন্য ব্যবহৃত হয়। এর মাধ্যমে স্ট্যাটাস কোড, হেডার এবং বডি সেট করা হয়। - Request এবং Response এর সংযোগ: Node.js এর HTTP সার্ভারে request এবং response অবজেক্টের মাধ্যমে ক্লায়েন্টের রিকোয়েস্ট গ্রহণ এবং রেসপন্স পাঠানো হয়।
URL Routing এবং Status Codes হল ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের দুটি গুরুত্বপূর্ণ ধারণা। URL Routing ওয়েব অ্যাপ্লিকেশনের বিভিন্ন URL এর সাথে প্রাসঙ্গিক কাজ বা পৃষ্ঠা যুক্ত করার প্রক্রিয়া, এবং Status Codes HTTP প্রোটোকলে সার্ভারের প্রতিক্রিয়া চিহ্নিত করার জন্য ব্যবহৃত কোড।
১. URL Routing
URL Routing হলো একটি প্রক্রিয়া যা নির্দিষ্ট URL প্যাটার্নের জন্য নির্দিষ্ট ফাংশন বা হ্যান্ডলার অ্যাসাইন করে। এটি ওয়েব সার্ভার বা ওয়েব ফ্রেমওয়ার্কের মধ্যে কার্যকর হয় এবং ইউজারের রিকোয়েস্টের সাথে সম্পর্কিত ডাটা বা পৃষ্ঠার প্রক্রিয়া নির্দেশ করে।
Node.js এ URL Routing
Node.js এ URL routing সাধারণত Express ফ্রেমওয়ার্কে ব্যবহৃত হয়। Express ব্যবহার করে URL প্যাটার্নের সাথে সম্পর্কিত হ্যান্ডলার বা মেথড যুক্ত করা যায়।
Express এ Routing উদাহরণ:
- সাধারণ Routing:
```javascript
const express = require('express');
const app = express();
// রুট '/' এর জন্য একটি GET রিকোয়েস্ট হ্যান্ডলার
app.get('/', (req, res) => {
res.send('Hello, World!');
});
// '/about' এর জন্য GET রিকোয়েস্ট হ্যান্ডলার
app.get('/about', (req, res) => {
res.send('About us');
});
// '/contact' এর জন্য GET রিকোয়েস্ট হ্যান্ডলার
app.get('/contact', (req, res) => {
res.send('Contact us');
});
// সার্ভার চালু করা
app.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
এখানে, `/`, `/about`, এবং `/contact` URL পাথে বিভিন্ন হ্যান্ডলার যুক্ত করা হয়েছে, যা ইউজারের রিকোয়েস্ট অনুযায়ী প্রতিক্রিয়া পাঠায়।
2. **ডাইনামিক Routing**:
Express এ URL এর মধ্যে প্যারামিটারও ব্যবহার করা যায়। যেমন, `/user/:id` প্যাটার্নের জন্য ডাইনামিক রাউটিং:
```javascript
app.get('/user/:id', (req, res) => {
const userId = req.params.id;
res.send(`User ID is ${userId}`);
});এখানে, :id একটি প্যারামিটার এবং ইউজারের রিকোয়েস্ট অনুযায়ী প্যারামিটারটি পরিবর্তিত হবে।
- HTTP মেথড ব্যবহার:
আপনি বিভিন্ন HTTP মেথড (GET, POST, PUT, DELETE) অনুযায়ী রাউটিং করতে পারেন।
// POST রিকোয়েস্ট হ্যান্ডলার
app.post('/submit', (req, res) => {
res.send('Data submitted!');
});Express Middleware এর মাধ্যমে Routing:
Express এ middleware ব্যবহার করে, আপনি URL রাউটিংয়ে অতিরিক্ত প্রক্রিয়া যুক্ত করতে পারেন, যেমন অথেনটিকেশন বা লোগিং:
app.use((req, res, next) => {
console.log(`Request URL: ${req.url}`);
next(); // পরবর্তী মডিউলে যেতে বলে
});২. Status Codes (HTTP Status Codes)
HTTP Status Codes হল কোড যা ওয়েব সার্ভারের প্রতিক্রিয়া সম্পর্কে ক্লায়েন্টকে তথ্য দেয়। এগুলি রিকোয়েস্টের সফলতা, ত্রুটি বা অন্য কিছু অবস্থা বোঝাতে ব্যবহৃত হয়। প্রতিটি স্ট্যাটাস কোডের একটি নির্দিষ্ট অর্থ রয়েছে এবং এটি HTTP রেসপন্সের অংশ হিসেবে ক্লায়েন্টকে ফেরত পাঠানো হয়।
HTTP Status Code এর শ্রেণী:
- 1xx - Informational:
- এই স্ট্যাটাস কোডগুলি সাধারণত ইনফরমেশন প্রদান করে। ক্লায়েন্টের রিকোয়েস্ট গ্রহণ করা হয়েছে এবং কাজ চলছে।
- উদাহরণ:
100 Continue
- 2xx - Success:
- এই কোডগুলি সফল রিকোয়েস্ট নির্দেশ করে। এটি নির্দেশ করে যে, ক্লায়েন্টের রিকোয়েস্ট সফলভাবে সম্পন্ন হয়েছে এবং সার্ভার সঠিকভাবে প্রতিক্রিয়া দিয়েছে।
- উদাহরণ:
200 OK: রিকোয়েস্ট সফল হয়েছে এবং সার্ভার সঠিক ডাটা দিয়েছে।201 Created: নতুন রিসোর্স সফলভাবে তৈরি হয়েছে।204 No Content: রিকোয়েস্ট সফল, কিন্তু সার্ভার কোনো কনটেন্ট প্রদান করেনি (যেমন, একটি ডিলিট অপারেশন)।
- 3xx - Redirection:
- এই কোডগুলি নির্দেশ করে যে, ক্লায়েন্টকে অন্য URL এ রিডাইরেক্ট করা হয়েছে।
- উদাহরণ:
301 Moved Permanently: রিসোর্সটি স্থায়ীভাবে অন্য জায়গায় সরানো হয়েছে।302 Found: রিসোর্সটি সাময়িকভাবে অন্য জায়গায় সরানো হয়েছে।304 Not Modified: রিসোর্সটি পরিবর্তিত হয়নি এবং ক্লায়েন্ট কেচড কনটেন্ট ব্যবহার করতে পারে।
- 4xx - Client Errors:
- এই কোডগুলি নির্দেশ করে যে, ক্লায়েন্টের পক্ষ থেকে কোনো ত্রুটি ঘটেছে (যেমন ভুল রিকোয়েস্ট বা অনুমতি নেই)।
- উদাহরণ:
400 Bad Request: ক্লায়েন্টের রিকোয়েস্ট ভুল বা অসম্পূর্ণ।401 Unauthorized: ক্লায়েন্টে অথেনটিকেশন তথ্য নেই বা ভুল।404 Not Found: সার্ভারে রিকোয়েস্ট করা রিসোর্স পাওয়া যায়নি।403 Forbidden: ক্লায়েন্টের রিকোয়েস্টের অনুমতি নেই।
- 5xx - Server Errors:
- এই কোডগুলি নির্দেশ করে যে, সার্ভারের পক্ষ থেকে ত্রুটি ঘটেছে।
- উদাহরণ:
500 Internal Server Error: সার্ভারে অজানা ত্রুটি ঘটেছে।502 Bad Gateway: সার্ভার অন্য সার্ভার থেকে ভুল প্রতিক্রিয়া পেয়েছে।503 Service Unavailable: সার্ভিস বর্তমানে অপ্রাপ্য, সার্ভার অস্থায়ীভাবে ব্যস্ত।
Express এ Status Codes ব্যবহার
Express এ আপনি res.status() মেথড ব্যবহার করে HTTP স্ট্যাটাস কোড সেট করতে পারেন।
app.get('/', (req, res) => {
res.status(200).send('Request successful!');
});
app.get('/not-found', (req, res) => {
res.status(404).send('Page not found');
});
app.get('/unauthorized', (req, res) => {
res.status(401).send('Unauthorized access');
});এখানে, স্ট্যাটাস কোড 200, 404, এবং 401 সেট করা হয়েছে এবং তাদের সাথে উপযুক্ত বার্তা পাঠানো হয়েছে।
সারাংশ
- URL Routing হল একটি প্রক্রিয়া যা নির্দিষ্ট URL প্যাটার্নের জন্য নির্দিষ্ট ফাংশন বা কাজ অ্যাসাইন করে। Node.js এর Express ফ্রেমওয়ার্কে বিভিন্ন HTTP মেথড এবং প্যারামিটার ব্যবহার করে রাউটিং করা যায়।
- HTTP Status Codes ক্লায়েন্টকে সার্ভারের প্রতিক্রিয়া বোঝায়। এই কোডগুলি সফলতা, ত্রুটি বা অন্যান্য অবস্থা নির্দেশ করে এবং HTTP রেসপন্সের মাধ্যমে পাঠানো হয়।
- Express এ URL Routing এবং Status Codes ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনের ইউজার ইন্টারঅ্যাকশন এবং সার্ভারের প্রতিক্রিয়া কার্যকরভাবে পরিচালনা করতে পারেন।
Static files হল এমন ফাইল, যেগুলি সার্ভার থেকে সরাসরি ক্লায়েন্ট (ব্রাউজার) এ পাঠানো হয়, এবং এগুলির কন্টেন্ট সাধারণত পরিবর্তন হয় না। উদাহরণস্বরূপ, HTML, CSS, JavaScript, ইমেজ ফাইল (JPEG, PNG), পিডিএফ, এবং অন্যান্য মিডিয়া ফাইলগুলি স্ট্যাটিক ফাইল হিসেবে পরিচিত।
Node.js এ static files সার্ভ করার জন্য আপনি সাধারণত express ফ্রেমওয়ার্ক ব্যবহার করেন। Express এর express.static() মডিউলটি স্ট্যাটিক ফাইল সার্ভ করার জন্য খুবই সুবিধাজনক। এখানে, আমরা Express ব্যবহার করে স্ট্যাটিক ফাইল সার্ভ করার পদ্ধতি দেখব।
১. Express এবং Static Files সার্ভ করা
Step 1: Express ইনস্টল করা
প্রথমে, যদি আপনি Express ফ্রেমওয়ার্ক ব্যবহার করতে চান, তবে আপনাকে express প্যাকেজটি ইনস্টল করতে হবে। এটি npm ব্যবহার করে ইনস্টল করা যাবে।
npm install expressStep 2: Static Files এর জন্য ফোল্ডার তৈরি করা
আপনার প্রজেক্টের মধ্যে একটি public নামক ফোল্ডার তৈরি করুন, যেখানে আপনি আপনার স্ট্যাটিক ফাইলগুলি (যেমন CSS, JavaScript, ইমেজ) রাখবেন।
/project
/public
/images
logo.png
/css
style.css
/js
script.js
app.jsStep 3: Express অ্যাপ তৈরি করা
এখন, Express অ্যাপ তৈরি করে express.static() ফাংশন ব্যবহার করে স্ট্যাটিক ফাইলগুলি সার্ভ করা যাবে।
// app.js ফাইলে Express ব্যবহার
const express = require('express');
const path = require('path');
const app = express();
// Static files সার্ভ করতে public ফোল্ডারটি ব্যবহার করা হচ্ছে
app.use(express.static(path.join(__dirname, 'public')));
// একটি রুট তৈরি করা
app.get('/', (req, res) => {
res.send('<h1>Welcome to Static File Server!</h1>');
});
// সার্ভার চালু করা
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});এখানে, express.static() ফাংশনটি public ফোল্ডারটিকে স্ট্যাটিক ফাইল সার্ভ করার জন্য সার্ভারে সংযুক্ত করেছে। এর মাধ্যমে আপনি ফোল্ডারের ভিতরে থাকা যেকোনো ফাইল ক্লায়েন্টে সরাসরি এক্সেস করতে পারবেন।
Step 4: ব্রাউজারে ফাইল অ্যাক্সেস করা
এখন আপনি আপনার ব্রাউজারে গিয়ে http://localhost:3000 URL এ গিয়ে ওয়েব পেজ দেখতে পাবেন। CSS, JavaScript বা ইমেজ ফাইলগুলি আপনার স্ট্যাটিক ফোল্ডার থেকে সরাসরি সার্ভ হবে।
যেমন:
- আপনার CSS ফাইলটি
http://localhost:3000/css/style.cssএ পাওয়া যাবে। - আপনার JavaScript ফাইলটি
http://localhost:3000/js/script.jsএ পাওয়া যাবে। - আপনার ইমেজ ফাইলটি
http://localhost:3000/images/logo.pngএ পাওয়া যাবে।
২. Multiple Static Directories
আপনি যদি একাধিক স্ট্যাটিক ডিরেক্টরি সার্ভ করতে চান, তাহলে express.static() এর মাধ্যমে একাধিক পাথ অ্যাড করতে পারেন।
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'assets')));এখানে, আপনার public এবং assets ফোল্ডার থেকে স্ট্যাটিক ফাইল সার্ভ হবে।
৩. Static Files সার্ভ করার অন্যান্য সুবিধা
- Caching: স্ট্যাটিক ফাইল সার্ভ করার সময় আপনি ক্যাশিং হেডারও ব্যবহার করতে পারেন, যাতে ফাইলগুলি ক্লায়েন্টে ক্যাশ হয় এবং সার্ভারে অতিরিক্ত লোড কমে।
- Content-Type সেটিং: Express স্বয়ংক্রিয়ভাবে স্ট্যাটিক ফাইলগুলির জন্য সঠিক Content-Type হেডার সেট করে (যেমন CSS, JS, ইমেজ, ইত্যাদি)।
- Path Rewriting: আপনি স্ট্যাটিক ফাইল সার্ভ করার জন্য পাথ রাইটিং কনফিগার করতে পারেন।
// Static ফাইল সার্ভ করার জন্য কাস্টম পাথ
app.use('/static', express.static(path.join(__dirname, 'public')));এখানে, আপনি /static পাথ ব্যবহার করে আপনার স্ট্যাটিক ফাইল অ্যাক্সেস করতে পারবেন, যেমন http://localhost:3000/static/css/style.css।
সারাংশ
- Express ব্যবহার করে আপনি সহজেই static files সার্ভ করতে পারেন।
express.static()মডিউলটি স্ট্যাটিক ফাইল সার্ভ করার জন্য ব্যবহৃত হয় এবং এটি খুবই কার্যকরী এবং সহজ।- আপনি multiple static directories একসাথে সার্ভ করতে পারেন এবং ফাইলগুলিকে ক্লায়েন্টে সরাসরি অ্যাক্সেস করতে পারেন।
- স্ট্যাটিক ফাইলগুলির জন্য ক্যাশিং, কন্টেন্ট টাইপ সেটিং, এবং কাস্টম পাথ ব্যবহার করে আরও কার্যকরী ফাইল সার্ভিং করতে পারবেন।
এভাবে আপনি আপনার Node.js অ্যাপে স্ট্যাটিক ফাইলগুলি সার্ভ করে ওয়েব অ্যাপ্লিকেশনের পারফরম্যান্স ও ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে পারবেন।
Read more